www.gusucode.com > vc++ 远程控制示例源程序-源码程序 > vc++ 远程控制示例源程序-源码程序\code\PeerYouC\RegeditValueBinbDlg.cpp
// RegeditValueBinbDlg.cpp : implementation file // Download by http://www.NewXing.com #include "stdafx.h" #include "PeerYouC.h" #include "RegeditValueBinbDlg.h" #include "mainfrm.h" #include "command.h" #include "peersocket.h" #include "hexeditctrl.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CRegeditValueBinbDlg dialog void MakeRegInfo(CTreeCtrl& tree,HTREEITEM item,REGEDIT ®) { HTREEITEM parent; char value[512],tmp[512]; value[0]=0;tmp[0]=0; strcpy(value,tree.GetItemText(item)); if(strcmp(value,"HKEY_CLASSES_ROOT")==0|| strcmp(value,"HKEY_CURRENT_USER")==0|| strcmp(value,"HKEY_LOCAL_MACHINE")==0|| strcmp(value,"HKEY_USERS")==0|| strcmp(value,"HKEY_CURRENT_CONFIG")==0) { strcpy(reg.key,value); reg.sunkey[0]=0; return; } parent=item; while((parent=tree.GetParentItem(parent))) { strcpy(tmp,tree.GetItemText(parent)); if(strcmp(tmp,"HKEY_CLASSES_ROOT")==0|| strcmp(tmp,"HKEY_CURRENT_USER")==0|| strcmp(tmp,"HKEY_LOCAL_MACHINE")==0|| strcmp(tmp,"HKEY_USERS")==0|| strcmp(tmp,"HKEY_CURRENT_CONFIG")==0) { strcpy(reg.key,tmp); strcpy(reg.sunkey,value); return; } else { strcat(tmp,"\\"); strcat(tmp,value); strcpy(value,tmp); } } } CRegeditValueBinbDlg::CRegeditValueBinbDlg(CWnd* pParent /*=NULL*/) : CDialog(CRegeditValueBinbDlg::IDD, pParent) { //{{AFX_DATA_INIT(CRegeditValueBinbDlg) m_name = _T(""); //}}AFX_DATA_INIT } void CRegeditValueBinbDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CRegeditValueBinbDlg) DDX_Control(pDX, IDC_DATA, m_data); DDX_Text(pDX, IDC_NAME, m_name); DDV_MaxChars(pDX, m_name, 255); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CRegeditValueBinbDlg, CDialog) //{{AFX_MSG_MAP(CRegeditValueBinbDlg) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CRegeditValueBinbDlg message handlers void CRegeditValueBinbDlg::OnOK() { // TODO: Add extra validation here UpdateData(); if(m_name.GetLength()==0) { MessageBox("数值名不能为空"); return; } CDialog::OnOK(); } BOOL CRegeditValueBinbDlg::OnInitDialog() { CDialog::OnInitDialog(); // TODO: Add extra initialization here CMainFrame* pMainFrm=(CMainFrame*)AfxGetApp()->GetMainWnd(); CListCtrl& list=pMainFrm->m_pRegList->GetListCtrl(); CTreeCtrl& tree=pMainFrm->m_pRegTree->GetTreeCtrl(); HTREEITEM treeselectitem=tree.GetSelectedItem(); int index=list.GetSelectionMark(); if(index>-1) { CString type; m_name=list.GetItemText(index,0); type=list.GetItemText(index,1); CEdit *edit=(CEdit*)GetDlgItem(IDC_NAME); REGEDIT reg; MakeRegInfo(tree,treeselectitem,reg); strcpy(reg.value,m_name); if(type=="REG_BINARY") reg.type=REG_BINARY; if(type=="REG_RESOURCE_LIST") reg.type=REG_RESOURCE_LIST; if(type=="REG_FULL_RESOURCE_DESCRIPTOR") reg.type=REG_FULL_RESOURCE_DESCRIPTOR; if(type=="REG_LINK") reg.type=REG_LINK; SOCKET s; DWORD ret; if(!PeerCreateSocket(&s,PEER_STREAM)) { return false; } WSAEVENT hevent=WSACreateEvent(); if(PeerConnectSocket(s,ADDRESS,7788)) { COMMAND cmd; memset(&cmd,0,sizeof(cmd)); cmd.CommandID=PEER_REGEDIT_GETVALUE; if(!PeerSendDataS(s,(char*)&cmd,sizeof(cmd),&ret,hevent)) { WSACloseEvent(hevent); PeerCloseSocket(s); return false; } if(!PeerSendDataS(s,(char*)®,sizeof(reg),&ret,hevent)) { WSACloseEvent(hevent); PeerCloseSocket(s); return false; } else { if(!PeerRecvDataS(s,(char*)®,sizeof(reg),&ret,hevent)||ret!=sizeof(reg)) { WSACloseEvent(hevent); PeerCloseSocket(s); return false; } m_data.SetData(reg.data,reg.datalen); m_data.SetFocus(); UpdateData(false); } } edit->EnableWindow(false); WSACloseEvent(hevent); PeerCloseSocket(s); } return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE }